//
//  main.c
//  冒泡排序
//
//  Created by szcq on 2021/4/22.
//

#include <stdio.h>

int main(int argc, const char * argv[]) {
    // insert code here...
//    printf("Hello, World!\n");
    
    
    /**
     
     重复访问要排序的元素列，依次比较两个相邻的元素，如果顺序（如从大到小、首字母从Z到A）错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换，也就是说该元素列已经排序完成。
     
     这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端（升序或降序排列），就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样，故名“冒泡排序”。
     */
    
    int values[5] = {23,45,5,87,13};
    
    int length = sizeof(values) / sizeof(values[0]);
    for (int i = 0; i < length; i++) {
        printf("%i,",values[i]);
    }
    printf("\n-----排序前-----\n");
    for (int i = 0; i < length - 1; i++) {
        for (int j = 0; j < length - 1 - i; j++) {
            int k = j + 1;
            printf("j == %i  ",j);
            printf("k == %i | ",k);
            if (values[j] > values[k]) {
                //交换数据
                int temp = values[j];
                values[j] = values[k];
                values[k] = temp;
            }
        }
        printf("\n");
    }
    
    printf("-----排序后-----\n");
    
    for (int i = 0; i < length; i++) {
        printf("%i,",values[i]);
    }
    // 输出  5,13,23,45,87
    
    /**
     //冒泡排序的  两个索引值
     j == 0  k == 1  j == 1  k == 2  j == 2  k == 3  j == 3  k == 4     //每次循环都会得到一个最值    87
     j == 0  k == 1  j == 1  k == 2  j == 2  k == 3  // 最值    45
     j == 0  k == 1  j == 1  k == 2   // 最值    23
     j == 0  k == 1  // 最值    13
     
     
     //选择排序  索引值
     i == 0  k == 1  i == 0  k == 2  i == 0  k == 3  i == 0  k == 4
     i == 1  k == 2  i == 1  k == 3  i == 1  k == 4
     i == 2  k == 3  i == 2  k == 4
     i == 3  k == 4
     */
    
    return 0;
}
